Source for file SC_CheckError.php
Documentation is available at SC_CheckError.php
* This file is part of EC-CUBE
* Copyright(c) 2000-2011 LOCKON CO.,LTD. All Rights Reserved.
* http://www.lockon.co.jp/
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
/*----------------------------------------------------------------------
*----------------------------------------------------------------------
// チェック対象の値が含まれる配列をセットする。
function doFunc($value, $arrFunc) {
foreach ( $arrFunc as $key ) {
* @param array $value value[0] = 項目名 value[1] = 判定対象 value[2] = 許可するタグが格納された配列
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
foreach($arrTag[1] as $val) {
foreach($value[2] as $tag) {
$this->arrErr[$value[1]] = "※ " . $value[0] . "に許可されていないタグ[" . strtoupper($val) . "]が含まれています。<br />";
* @param array $value value[0] = 項目名 value[1] = 判定対象
if (isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$this->arrErr[$value[1]] = "※ " . $value[0] . "が入力されていません。<br />";
$this->arrErr[$value[1]] = "※ " . $value[0] . "が選択されていません。<br />";
* @param array $value value[0] = 判定対象 value[1] = 項目名
if(isset ($this->arrErr[$value[0]])) {
$this->createParam($value);
$this->arrErr[$value[0]] = "※ " . $value[0] . "が入力されていません。<br />";
* @param array $value value[0] = 項目名 value[1] = 判定対象
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$this->arrErr[$value[1]] = "※ " . $value[0] . "にスペース、タブ、改行のみの入力はできません。<br />";
* @param array $value value[0] = 項目名 value[1] = 判定対象
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$this->arrErr[$value[1]] = "※ " . $value[0] . "にスペース、タブ、改行は含めないで下さい。<br />";
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$this->arrErr[$value[1]] = "※ " . $value[0] . "に0で始まる数値が入力されています。<br />";
* プルダウンなどで選択されていない場合エラーを返す
* @param array $value value[0] = 項目名 value[1] = 判定対象
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$this->arrErr[$value[1]] = "※ " . $value[0] . "が選択されていません。<br />";
* @param array $value value[0] = 項目名1 value[1] = 項目名2 value[2] = 判定対象文字列1 value[3] = 判定対象文字列2
if(isset ($this->arrErr[$value[2]]) || isset ($this->arrErr[$value[3]])) {
$this->createParam($value);
$this->arrErr[$value[2]] = "※ " . $value[0] . "と" . $value[1] . "が一致しません。<br />";
* @param array $value value[0] = 項目名1 value[1] = 項目名2 value[2] = 判定対象文字列1 value[3] = 判定対象文字列2
if(isset ($this->arrErr[$value[2]]) || isset ($this->arrErr[$value[3]])) {
$this->createParam($value);
$this->arrErr[$value[2]] = "※ " . $value[0] . "と" . $value[1] . "は、同じ値を使用できません。<br />";
* 値の大きさを比較する value[2] < value[3]でなければエラー
* @param array $value value[0] = 項目名1 value[1] = 項目名2 value[2] = 判定対象文字列1 value[3] = 判定対象文字列2
if(isset ($this->arrErr[$value[2]]) || isset ($this->arrErr[$value[3]])) {
$this->createParam($value);
$this->arrErr[$value[2]] = "※ " . $value[0] . "は" . $value[1] . "より大きい値を入力できません。<br />";
* @param array $value value[0] = 項目名 value[1] = 判定対象文字列 value[2] = 最大文字数(半角も全角も1文字として数える)
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
if( mb_strlen($this->arrParam[$value[1]]) > $value[2] ) {
$this->arrErr[$value[1]] = "※ " . $value[0] . "は" . $value[2] . "字以下で入力してください。<br />";
* @param array $value value[0] = 項目名 value[1] = 判定対象文字列 value[2] = 最小文字数(半角も全角も1文字として数える)
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
if( mb_strlen($this->arrParam[$value[1]]) < $value[2] ) {
$this->arrErr[$value[1]] = "※ " . $value[0] . "は" . $value[2] . "字以上で入力してください。<br />";
* @param array $value value[0] = 項目名 value[1] = 判定対象文字列 value[2] = 最大数]
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
if($this->arrParam[$value[1]] > $value[2] ) {
$this->arrErr[$value[1]] = "※ " . $value[0] . "は" . $value[2] . "以下で入力してください。<br />";
* @param array $value value[0] = 項目名 value[1] = 判定対象文字列 value[2] = 最小数
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
if($this->arrParam[$value[1]] < $value[2] ) {
$this->arrErr[$value[1]] = "※ " . $value[0] . "は" . $value[2] . "以上で入力してください。<br />";
* @param array $value value[0] = 項目名 value[1] = 判定対象文字列
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
if ( $this->numelicCheck($this->arrParam[$value[1]]) ) {
$this->arrErr[$value[1]] = "※ " . $value[0] . "は数字で入力してください。<br />";
* @param array $value value[0] = 項目名 value[1] = 判定対象文字列
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$this->arrErr[$value[1]] = "※ " . $value[0] . "は数字で入力してください。<br />";
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$this->arrErr[$value[1]] = "※ " . $value[0] . "は半角英字で入力してください。<br />";
* @param array $value 各要素は以下の通り。<br>
* [4]: 電話番号各項目制限 (指定なしの場合、TEL_ITEM_LEN)<br>
* [5]: 電話番号総数 (指定なしの場合、TEL_LEN)
$telItemLen = isset ($value[4]) ? $value[4] : TEL_ITEM_LEN;
$telLen = isset ($value[5]) ? $value[5] : TEL_LEN;
if (isset ($this->arrErr[$value[1]]) || isset ($this->arrErr[$value[2]]) || isset ($this->arrErr[$value[3]])) {
$this->createParam($value);
for($i = 1; $i <= 3; $i++ ) {
// すべての項目が満たされていない場合を判定(一部だけ入力されている状態)
if($cnt > 0 && $cnt < 3) {
$this->arrErr[$value[1]] .= "※ " . $value[0] . "はすべての項目を入力してください。<br />";
for($i = 1; $i <= 3; $i++ ) {
$this->arrErr[$value[$i]] .= "※ " . $value[0] . $i . "は" . $telItemLen . "字以内で入力してください。<br />";
} else if ($this->numelicCheck($this->arrParam[$value[1]])) {
$this->arrErr[$value[$i]] .= "※ " . $value[0] . $i . "は数字で入力してください。<br />";
if ($total_count > $telLen) {
$this->arrErr[$value[3]] .= "※ " . $value[0] . "は" . $telLen . "文字以内で入力してください。<br />";
$this->createParam($value);
// 既に該当項目にエラーがある場合は、判定しない。
for($i = 1; $i < $max; $i++ ) {
if(isset ($this->arrErr[$value[$i]])) {
// すべての項目がブランクでないか、すべての項目が入力されていない場合はエラーとする。
for($i = 1; $i < $max; $i++ ) {
$this->arrErr[$value[1]] = "※ " . $value[0] . "が入力されていません。<br />";
// 既に該当項目にエラーがある場合は、判定しない。
for($i = 1; $i < $max; $i++ ) {
if(isset ($this->arrErr[$value[$i]])) {
// すべての項目がブランクでないか、すべての項目が入力されていない場合はエラーとする。
for($i = 1; $i < $max; $i++ ) {
$this->arrErr[$value[1]] = "※ " . $value[0] . "はすべての項目を入力して下さい。<br />";
$this->createParam($value);
// 既に該当項目にエラーがある場合は、判定しない。
for($i = 1; $i < $max; $i++ ) {
if(isset ($this->arrErr[$value[$i]])) {
// すべての項目がブランクでないか、すべての項目が入力されていない場合はエラーとする。
for($i = 1; $i < $max; $i++ ) {
$this->arrErr[$value[1]] = "※ " . $value[0] . "が入力されていません。<br />";
$this->createParam($value);
// 既に該当項目にエラーがある場合は、判定しない。
for($i = 1; $i < $max; $i++ ) {
if(isset ($this->arrErr[$value[$i]])) {
// すべての項目がブランクでないか、すべての項目が入力されていない場合はエラーとする。
for($i = 1; $i < $max; $i++ ) {
$this->arrErr[$value[1]] = "※ " . $value[0] . "は先頭の項目から順番に入力して下さい。<br />";
// value[0] = 項目名 value[1] = 判定対象文字列
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$this->arrErr[$value[1]] = "※ " . $value[0] . "はカタカナで入力してください。<br />";
/* カタカナの判定2 (タブ、スペースは許可する) */
// value[0] = 項目名 value[1] = 判定対象文字列
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$this->arrErr[$value[1]] = "※ " . $value[0] . "はカタカナで入力してください。<br />";
// value[0] = 項目名 value[1] = 判定対象文字列
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$this->arrErr[$value[1]] = "※ " . $value[0] . "は英数字で入力してください。<br />";
// value[0] = 項目名 value[1] = 判定対象文字列
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$this->arrErr[$value[1]] = "※ " . $value[0] . "は英数記号で入力してください。<br />";
// value[0] = 項目名 value[1] = 判定対象
$this->createParam($value);
$this->arrErr[$value[1]] = "※ " . $value[0] . "は1以上を入力してください。<br />";
// 入力文字の桁数判定 → 最小桁数<入力文字列<最大桁数
// value[0] = 項目名 value[1] = 判定対象文字列 value[2] = 最小桁数 value[3] = 最大桁数
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
// $this->arrParam[$value[0]] = mb_convert_kana($this->arrParam[$value[0]], 'n');
if( ( $count > 0 ) && $value[2] > $count || $value[3] < $count ) {
$this->arrErr[$value[1]] = "※ $value[0]は$value[2]桁~$value[3]桁で入力して下さい。<br />";
// 入力文字の桁数判定 → 入力文字列 = 桁数 以外はNGの場合
// value[0] = 項目名 value[1] = 判定対象文字列 value[2] = 桁数
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
if(($count > 0) && $count != $value[2] ) {
$this->arrErr[$value[1]] = "※ $value[0]は$value[2]桁で入力して下さい。<br />";
* @param array $value 各要素は以下の通り。<br>
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$quoted_pair = "\\\\(?:$vchar|$wsp)";
$qtext = '[\x21\x23-\x5b\x5d-\x7e]';
$qcontent = "(?:$qtext|$quoted_pair)";
$quoted_string = "\"$qcontent*\"";
$atext = '[a-zA-Z0-9!#$%&\'*+\-\/\=?^_`{|}~]';
$dot_atom_text = "$atext+(?:[.]$atext+)*";
$dot_atom = $dot_atom_text;
$local_part = "(?:$dot_atom|$quoted_string)";
$addr_spec = "${local_part}[@]$domain";
$dot_atom_loose = "$atext+(?:[.]|$atext)*";
$local_part_loose = "(?:$dot_atom_loose|$quoted_string)";
$addr_spec_loose = "${local_part_loose}[@]$domain";
if (RFC_COMPLIANT_EMAIL_CHECK) {
$regexp = "/\A${addr_spec}\z/";
// 携帯メールアドレス用に、..や.@を許容する。
$regexp = "/\A${addr_spec_loose}\z/";
$this->arrErr[$value[1]] = "※ " . $value[0] . "の形式が不正です。<br />";
// メールアドレスに使用する文字を正規表現で判定する
// value[0] = 項目名 value[1] = 判定対象メールアドレス
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$this->arrErr[$value[1]] = "※ " . $value[0] . "に使用する文字を正しく入力してください。<br />";
// URLを正規表現で判定する。デフォルトでhttp://があってもOK
// value[0] = 項目名 value[1] = 判定対象URL
if(isset ($this->arrErr[$value[1]])) {
$this->arrErr[$value[1]] = "※ " . $value[0] . "を正しく入力してください。<br />";
// value[0] = 項目名 value[1] = 判定対象IPアドレス文字列
if(isset ($this->arrErr[$value[1]])) {
if(strpos($params,"\n") === false){
foreach($params as $param){
$this->arrErr[$value[1]] = "※ " . $value[0] . "に正しい形式のIPアドレスを入力してください。<br />";
// value[0] = 項目名 value[1] = 判定対象 value[2]=array(拡張子)
if(isset ($this->arrErr[$value[1]]) || count($value[2]) == 0) {
$this->createParam($value);
if($_FILES[$value[1]]['name'] != "" ) {
$array_ext = explode(".", $_FILES[$value[1]]['name']);
foreach ( $value[2] as $checkExt ){
// チェック拡張子のピリオドの数を取得('tar.gz'の場合1個、'jpg'のように通常は0個)
$ext .= $array_ext[$i] . ".";
$ext = $array_ext[ count ( $array_ext ) - 1 ];
if ( $ext == $checkExt) {
$this->arrErr[$value[1]] = "※ " . $value[0] . "で許可されている形式は、" . $strExt . "です。<br />";
// value[0] = 項目名 value[1] = 判定対象 value[2] = 指定ディレクトリ
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$dir = IMAGE_SAVE_REALDIR;
$path = $dir . "/" . $this->arrParam[$value[1]];
$this->arrErr[$value[1]] = "※ " . $path . "が見つかりません。<br />";
// value[0] = 項目名 value[1] = 判定対象 value[2] = 指定サイズ(KB)
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
if(!($_FILES[$value[1]]['size'] != "" && $_FILES[$value[1]]['size'] > 0)){
$this->arrErr[$value[1]] = "※ " . $value[0] . "をアップロードして下さい。<br />";
// value[0] = 項目名 value[1] = 判定対象 value[2] = 指定サイズ(KB)
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
if( $_FILES[$value[1]]['size'] > $value[2] * 1024 ){
if( $value[2] >= 1000 ) {
$value[2] = $value[2] / 1000;
$this->arrErr[$value[1]] = "※ " . $value[0] . "のファイルサイズは" . $value[2] . $byte . "以下のものを使用してください。<br />";
// 入力文字が英数字,"_","-"以外ならエラーを返す
// value[0] = 項目名 value[1] = 判定対象文字列
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
if( strlen($_FILES[$value[1]]['name']) > 0 && !preg_match("/^[[:alnum:]_\.-]+$/i", $_FILES[$value[1]]['name']) ) {
$this->arrErr[$value[1]] = "※ " . $value[0] . "のファイル名に日本語やスペースは使用しないで下さい。<br />";
/* ファイル名の判定(アップロード以外の時) */
// 入力文字が英数字,"_","-"以外ならエラーを返す
// value[0] = 項目名 value[1] = 判定対象文字列
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$this->arrErr[$value[1]] = "※ " . $value[0] . "のファイル名に日本語やスペースは使用しないで下さい。<br />";
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$this->arrErr[$value[1]] = "※ " . $value[0] . "はすべての項目を入力して下さい。<br />";
$this->arrErr[$value[1]] = "※ " . $value[0] . "が正しくありません。<br />";
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$this->arrErr[$value[1]] = "※ " . $value[0] . "はすべての項目を入力して下さい。<br />";
$this->arrErr[$value[1]] = "※ " . $value[0] . "が正しくありません。<br />";
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$this->arrErr[$value[1]] = "※ " . $value[0] . "はすべての項目を入力して下さい。<br />";
$this->arrErr[$value[1]] = "※ " . $value[0] . "が正しくありません。<br />";
if (isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$this->doFunc(array($value[0]. '(年)', $value[1], BIRTH_YEAR), array("NUM_CHECK", "MIN_CHECK"));
if (isset ($this->arrErr[$value[1]])) {
$this->doFunc(array($value[0]. '(年)', $value[1], date('Y',strtotime('now'))), array("MAX_CHECK"));
if (isset ($this->arrErr[$value[1]])) {
// XXX createParam() が二重に呼ばれる問題を抱える
/*-----------------------------------------------------------------*/
/* 年月日に別れた2つの期間の妥当性をチェックし、整合性と期間を返す
/* 引数 (開始年,開始月,開始日,終了年,終了月,終了日)
/* 1.開始年月日 (YYYYMMDD 000000)
/* 2.終了年月日 (YYYYMMDD 235959)
/* 3.エラー ( 0 = OK, 1 = NG )
/*-----------------------------------------------------------------*/
// value[3] = start_month
if(isset ($this->arrErr[$value[2]]) || isset ($this->arrErr[$value[5]])) {
$this->createParam($value);
$this->arrErr[$value[2]] = "※ " . $value[0] . "を正しく指定してください。<br />";
$this->arrErr[$value[5]] = "※ " . $value[1] . "を正しく指定してください。<br />";
if (($this->arrErr[$value[2]] == "" && $this->arrErr[$value[5]] == "") && $date1 > $date2) {
$this->arrErr[$value[2]] = "※ " . $value[0]. "と" . $value[1]. "の期間指定が不正です。<br />";
/*-----------------------------------------------------------------*/
/* 年月日時に別れた2つの期間の妥当性をチェックし、整合性と期間を返す
/* 引数 (開始年,開始月,開始日,開始時間,開始分,開始秒,
/* 終了年,終了月,終了日,終了時間,終了分,終了秒)
/* 1.開始年月日 (YYYYMMDDHHmmss)
/* 2.終了年月日 (YYYYMMDDHHmmss)
/* 3.エラー ( 0 = OK, 1 = NG )
/*-----------------------------------------------------------------*/
// value[3] = start_month
// value[6] = start_minute
// value[7] = start_second
// value[12] = end_minute
// value[13] = end_second
/*-----------------------------------------------------------------*/
if(isset ($this->arrErr[$value[2]]) || isset ($this->arrErr[$value[8]])) {
$this->createParam($value);
$this->arrErr[$value[2]] = "※ " . $value[0] . "を正しく指定してください。<br />";
$this->arrErr[$value[8]] = "※ " . $value[1] . "を正しく指定してください。<br />";
if (($this->arrErr[$value[2]] == "" && $this->arrErr[$value[8]] == "") && $date1 > $date2) {
$this->arrErr[$value[2]] = "※ " . $value[0]. "と" . $value[1]. "の期間指定が不正です。<br />";
$this->arrErr[$value[2]] = "※ " . $value[0]. "と" . $value[1]. "の期間指定が不正です。<br />";
/*-----------------------------------------------------------------*/
/* 年月に別れた2つの期間の妥当性をチェックし、整合性と期間を返す
/* 1.開始年月日 (YYYYMMDD 000000)
/* 2.終了年月日 (YYYYMMDD 235959)
/* 3.エラー ( 0 = OK, 1 = NG )
/*-----------------------------------------------------------------*/
// value[3] = start_month
if(isset ($this->arrErr[$value[2]]) || isset ($this->arrErr[$value[4]])) {
$this->createParam($value);
$this->arrErr[$value[2]] = "※ " . $value[0] . "を正しく指定してください。<br />";
$this->arrErr[$value[4]] = "※ " . $value[1] . "を正しく指定してください。<br />";
if (($this->arrErr[$value[2]] == "" && $this->arrErr[$value[5]] == "") && $date1 > $date2) {
$this->arrErr[$value[2]] = "※ " . $value[0]. "と" . $value[1]. "の期間指定が不正です。<br />";
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$this->arrErr[$value[1]] = "※ 指定した" . $value[0] . "は存在しません。<br />";
if(isset ($this->arrErr[$value[1]])) {
$this->arrErr[$value[1]] = "※ " . $value[0] . "の形式が不正です。<br />";
// value[0] = 項目名 value[1] = 判定対象メールアドレス
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$objMobile = new SC_Helper_Mobile_Ex();
if(strlen($this->arrParam[$value[1]]) > 0 && !$objMobile->gfIsMobileMailAddress($this->arrParam[$value[1]])) {
$this->arrErr[$value[1]] = "※ " . $value[0] . "は携帯電話のものではありません。<br />";
* CHECK_REGIST_CUSTOMER_EMAIL
* @param array $value value[0] = 項目名 value[1] = 判定対象メールアドレス
if(isset ($this->arrErr[$value[1]])) {
$this->createParam($value);
$register_user_flg = SC_Helper_Customer_Ex::sfCheckRegisterUserFromEmail($this->arrParam[$value[1]]);
switch($register_user_flg) {
$this->arrErr[$value[1]] .= "※ すでに会員登録で使用されている" . $value[0] . "です。<br />";
$this->arrErr[$value[1]] .= "※ 退会から一定期間の間は、同じ" . $value[0] . "を使用することはできません。<br />";
* value[0] = 項目名 value[1] = 判定対象文字列
* value[2] = 入力を禁止する文字列(配列)
* @example $objErr->doFunc(array('URL', 'contents', $arrReviewDenyURL), array("PROHIBITED_STR_CHECK"));
if( isset ($this->arrErr[$value[1]]) || empty($this->arrParam[$value[1]]) ) {
$this->createParam($value);
$targetStr = $this->arrParam[$value[1]];
$prohibitedStr = str_replace(array('|', '/'), array('\|', '\/'), $value[2]);
$pattern = '/' . join('|', $prohibitedStr) . '/i';
$this->arrErr[$value[1]] = "※ " . $value[0] . "は入力できません。<br />";
* @param array $value [0] => 項目名, [1] => 評価する文字列
function EVAL_CHECK($value) {
if (isset ($this->arrErr[$value[0]])) {
$this->createParam($value);
if ($this->evalCheck($value[1]) === false) {
$this->arrErr[$value[0]] = "※ " . $value[0] . " の形式が不正です。<br />";
* $value が PHPコードとして評価可能かチェックする.
* @param mixed PHPコードとして評価する文字列
* @return mixed PHPコードとして評価できない場合 false,
function evalCheck($value) {
return @eval ("return " . $value . ";");
* 未定義の $this->arrParam に空要素を代入する.
function createParam($value) {
foreach ($value as $key) {
* @param string $string チェックする文字列
* @return boolean 値が10進数の数値表現のみの場合 true
function numelicCheck($string) {
* XXX 10進数の数値表現か否かを調べたいだけだが,
* ctype_digit() は文字列以外 false を返す.
* string ではなく int 型の数値が入る場合がある.
$string = (string) $string;
Documentation generated on Fri, 24 Feb 2012 14:02:27 +0900 by Seasoft
|